package com.xiaoshuidi.cloud.module.rooms.service;

import com.xiaoshuidi.cloud.framework.common.pojo.CommonResult;
import com.xiaoshuidi.cloud.framework.common.pojo.PageResult;
import com.xiaoshuidi.cloud.module.rooms.controller.app.map.vo.*;

import java.util.List;

/**
 * @author hans.zhang
 */
public interface MapService {

    /**
     * 根据经纬度获取范围内房源数据
     *
     * @param maxLongitude     最大经度
     * @param minLongitude     最小经度
     * @param maxLatitude      最大维度
     * @param minLatitude      最小经度
     * @param zoom             缩放等级
     * @param tenantId
     * @param isConcentrated
     * @param district         区域
     * @param monthRentalMin   租金范围-下限
     * @param monthRentalMax   租金范围-上限
     * @param longitude        地铁站经度
     * @param latitude         地铁站纬度
     * @param isWhole          出租方式,是否整租 true:整租 false:合租
     * @param bedRoomNum       户型-几室 1:一室 2:二室 3:三室 4:四室 5:其他
     * @param publicFacilities 特色需求(公共设施)
     * @param roomHouseState 房源状态 1：可租房源 2：全部房源
     * @return
     */
    CommonResult<List<GetMapRespVO>> getMap(Double maxLongitude, Double minLongitude, Double maxLatitude, Double minLatitude, Double zoom, Long tenantId, Boolean isConcentrated, String district, Double monthRentalMin, Double monthRentalMax, Double longitude, Double latitude, Boolean isWhole, Integer bedRoomNum, String publicFacilities, String roomHouseState);

    /**
     * 同步区域,街道经纬度到redis
     * @return
     */
    CommonResult<Boolean> snycLatLonToRedis();

    /**
     * 通勤时间找房
     *
     * @param lat
     * @param lng
     * @param minute   时间（分钟）
     * @param mode     通勤方式
     * @param viewMode 查看模式 1：公寓（门店） 2：（合租）房源
     * @param pageNum  第几页
     * @param pageSize 每页大小
     * @param tenantId
     * @return
     */
    CommonResult<PageResult<CommutingRimeFindRoomRespVO>> commutingtimefindroom(String address, Double lat, Double lng, Integer minute, String mode, Integer viewMode, Integer pageNum, Integer pageSize, Long tenantId);

    /**
     * 通勤距离找房
     *
     * @param lat
     * @param lng
     * @param distance 距离（公里）
     * @param viewMode 查看模式： 1：公寓（门店） 2：（房源）房源
     * @param pageNum  第几页
     * @param pageSize 每页大小
     * @param tenantId
     * @return
     */
    CommonResult<PageResult<CommutingDistanceFindRoomRespVO>> commutingDistanceFindRoom(String address, Double lat, Double lng, Integer distance, Integer viewMode, Integer pageNum, Integer pageSize, Long tenantId);

    /**
     * 地图找房-查看小区房源情况
     *
     * @param roomAreaId 小区id
     * @param tenantId
     * @param pageNo
     * @param pageSize
     * @return
     */
    CommonResult<GetApartmentAreaInfoRespVO> getApartmentAreaInfo(Long roomAreaId, Long tenantId, Integer pageNo, Integer pageSize);

    /**
     * 获取所有地铁线路
     * @return
     */
    List<MetroRouteRespVO> getMetroRoute();

    /**
     * 获取地铁线路下的站点
     * @param id
     * @return
     */
    List<MetroSiteRespVO> getMetroSite(Long id);

    /**
     * 地图找房-根据区域获取街道房源情况
     * @param district
     * @param street
     * @param tenantId
     * @return
     */
    CommonResult<List<GetMapRespVO>> getStreetInfoByDistrict(String district, String street, Long tenantId);

    /**
     * 地图找房-搜索-根据小区名获取对应的小区信息
     *
     * @param searchBox      搜索框内容
     * @param isConcentrated 是否集中式
     * @param roomHouseState 房源状态 1：可租房源 2：全部房源
     * @param pageNo         分页参数
     * @param pageSize       分页参数
     * @param tenantId       租户id
     * @return
     */
    CommonResult<PageResult<GetMapRespVO>> mapFindSearch(String searchBox, Boolean isConcentrated, String roomHouseState, Integer pageNo, Integer pageSize, Long tenantId);
}
